package com.turbo.config;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;

import com.intellij.ide.FileIconPatcher;
import com.intellij.ide.FileIconPatcherImpl;
import com.intellij.openapi.fileTypes.FileType;
import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * @author: zwx
 * @time: 2021/3/23 23:01
 */
public class FreeMarkerConfig {

    private Configuration cfg;

    public void init() throws Exception {
        // 初始化FreeMarker配置
        // 创建一个Configuration实例
        cfg = new Configuration(Configuration.VERSION_2_3_31);
        // 设置FreeMarker的模版文件位置
        cfg.setClassLoaderForTemplateLoading(FreeMarkerConfig.class.getClassLoader(), "templates");
    }

    /**
     * @param fileName 生成文件的名称，包括扩展名。如：demo.java
     * @param paramMap 参数集合
     * @param hf FreeMarkerConfig
     * @param saveDir 存入文件的地址，不包含文件名
     * @param templateName 模板名称，包括扩展名。如：demo.ftl
     * @throws Exception 异常抛出
     */
    public void process(String fileName, Map<String,Object> paramMap, FreeMarkerConfig hf, String saveDir, String templateName) throws Exception {
        Template template = cfg.getTemplate(templateName);
        hf.buildTemplate(paramMap, saveDir, fileName, template);
    }

    public void buildTemplate(Map<String,Object> root, String dir,
                              String fileName, Template template) {
        String realSavePath;
        if (!dir.endsWith("/")){
            realSavePath = dir + "/" + fileName;
        }else {
            realSavePath = dir + fileName;
        }

        File newsDir = new File(dir);
        if (!newsDir.exists()) {
            newsDir.mkdirs();
        }
        try {
            Writer out = new OutputStreamWriter(new FileOutputStream(
                    realSavePath), "UTF-8");
            template.process(root, out);
            System.out.println("success");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
